Анализ поведения пользователей в мобильном приложении

Задача продуктовых менеджеров мобильного приложения «Ненужные вещи» — изучить поведение пользователей, чтобы определить наиболее частые модели поведения, которые приводят к целевому действию – просмотру контактов автора объявления.

Это необходимо для управления вовлечённостью клиентов и адаптации приложения к потребностям целевой и смежной аудитории на основе данных о поведении пользователей.

Основные вопросы исследования:

Также планируется оценить, как часто пользователи, которые просматривают контакты, совершают различные действия, и сравнить это с теми, кто этого не делает.

Анализ поведения пользователей поможет проверить гипотезы, которые влияют на просмотр контактов.

План работы:

Описание данных:

Столбцы в /datasets/mobile_sources.csv:

Столбцы в /datasets/mobile_dataset.csv:

Чтение данных

наверх

Предобработка данных

наверх

Большую часть преобразований, которые мы наметили при изучении первоначальных датасетов, можно совершить в одной ячейке. Но прежде чем устранять дубликаты в действиях, выведем уникальные значения из столбца event.name.

Да, есть два действия: contacts_show и show_contacts, которые отвечают одно и то же — просмотр контактов в объявлении. Это может быть связано с изменением логики сбора информации или размещением данных о разных группах пользователей на разных серверах, где названия целевых действий различаются.

Для нашей работы не требуется выяснять точную причину появления этого неявного дубликата. Поэтому мы просто заменим одно из названий. Кроме того мы можем привести различные действия в поиске к единому значению, так как углубляться в тонкости поисковых запросов в рамках анализа нам не нужно.

Удаление дубликатов

наверх

Если сравнивать по каждому пользователю одинаковые действия в рамках одной секунды, то обнаруживаются 1224 дубликата. Выведем часть строк таких дублей.

Есть совпадения по различным действиям, не только по просмотрам. Более того, количество выведенных строк увеличилось менее чем в два раза по сравнению с количеством дублей. Это означает, что некоторые действия повторялись в течение одной секунды более двух раз.

Также по выведенным строкам видно, что в некоторых случаях одно действие могло длиться больше секунды. Например, просмотр карт у пользователя с идентификатором ed13f6f0-08f4-4561-852e-456580f7a40d: первые дубликаты произошли в 11:10:39, но даже на 40-й секунде действие повторялось неоднократно, раз оно было выведено в списке дубликатов.

Запомним индекс 421 для последующей проверки этого участка. Чтобы удалить такие дубликаты, нам потребуется создать вспомогательные столбцы для проверки отсортированных по времени событий на наличие дубликатов в течение соседних секунд.

Пользователь активно изучает карту, однако некоторые его действия можно рассматривать как дубли, поскольку они повторяются с небольшим интервалом. Возможно, речь идёт о двойных кликах, которые не представляют интереса для нашего анализа.

Стоит отметить, что действия с индексами 421 и 429 отличаются друг от друга более чем на секунду — и не помечены как дубликаты.

Дубликаты с картой у пользователя успешно удалены, а строки с индексами 421 и 429 сохранились. Очистка датасета прошла успешно. Проверим, как сильно уменьшился наш датасет.

Мы удалили 1796, или 2,4%, дубликатов в данных, очистив не только одинаковые действия, которые происходили в течение одной секунды, но и повторяющиеся действия, которые происходили в соседних секундах. Количество уникальных пользователей сохранено.

Добавление новых столбцов

наверх

Чтобы провести анализ, нам нужно рассмотреть каждую группу пользователей отдельно: тех, кто хотя бы раз просматривал контакты, и тех, кто не делал этого за исследуемый период.

Для выделения этих групп мы отберём пользователей, у которых хотя бы однажды было действие contacts_show, а затем сравним их идентификаторы с основным датасетом и проставим флаги в новый столбец.

Добавлен новый столбец для разделения пользователей на группы в зависимости от совершения целевого действия.

Для удобства работы с датой, выделим её в отдельный столбец.

Мы успешно создали столбец с днями, когда пользователи совершали действия в приложении.

Теперь нам нужно для каждого пользователя определить отдельные сеансы использования приложения. Но сначала нужно решить, какой промежуток времени бездействия считать таймаутом.

В индустрии стандартом является таймаут в 30 минут. Это значение учитывает короткие периоды бездействия, но при этом достаточно велико, чтобы объединить действия, выполненные в течение одного сеанса использования приложения или веб-страницы. Однако период бездействия, после которого считается, что сессия завершена, можно настроить вручную.

Чтобы определить время бездействия, применим методы кластеризации, группируя временные интервалы между действиями пользователей. Это позволит определить естественные кластеры, которые могут подсказать оптимальное время таймаута. Чтобы сэкономить время, не будем строить дендрограмму, а проверим несколько вариантов кластеров для сравнения.

Минимальный средний промежуток составляет 1 час 40 минут. Однако, учитывая, что во второй группе пользователи активны менее чем раз в неделю, по ним нельзя судить о таймауте.

Если разделить данные на три кластера, то минимальный средний промежуток времени между логами будет около часа. Остальные временные интервалы превышают сутки, что не подходит для определения сессий в нашем случае.

Если разделить логи на четыре кластера, то минимальное среднее время между действиями пользователей в приложении составит 39 минут.

Среди пяти кластеров минимальный средний промежуток времени между действиями пользователей составляет около 37 минут. Разница между группами с минимальным таймаутом, полученными при разделении логов на четыре и пять групп, не является значительной, поэтому дальше нет смысла увеличивать количество кластеров.

Во всех вариантах наблюдаются кластеры с промежутками более суток, что указывает на редкую активность пользователей в некоторых группах. Для определения таймаута выберем 60 минут, так как это значение находится между минимальными временными интервалами и подходит для большинства пользователей, обеспечивая баланс между точностью и практичностью.

Для каждой сессии мы создали уникальный идентификатор. Благодаря этому мы можем высчитать, сколько времени пользователь провёл в приложении при каждом своём подключении.

Ещё один столбец успешно добавлен. Сессия, длящаяся 0 секунд, выглядит очень подозрительно, изучим строки с такими значениями.

У нас есть 1804 строки, которые содержат аномально короткие сессии. Если мы удалим их, то потеряем ещё 2,4% исходных данных. Однако почти 40% этих строк содержат информацию о действиях пользователей, относящихся к целевой аудитории.

За такое короткое время пользователь вряд ли совершит действия, которые можно было бы отобразить в воронке. И хотя вероятность того, что эти строки будут полезны при анализе, невелика, мы всё же не можем сразу удалить их: сначала определим, сколько действий на самом деле было выполнено в таких сессиях.

Есть 5 сессий, длящихся меньше секунды, с двумя действиями. Выведем их поближе.

В каждой из этих пяти сессий есть пара действий, одно из которых — просмотр контактов. С точки зрения построения воронки этих данных может быть недостаточно, но для расчёта конверсии они пригодятся.

Остальные 1794 действия можно удалить, так как они, вероятно, свидетельствуют о случаях незапланированного открытия приложения, даже если в них хранится последнее выполненное действие, сохранённое с предыдущей сессии.

Количество уникальных пользователей в нашем датасете уменьшилось на 88 человек, что составляет 2% от первоначального числа. Однако были удалены только те сеансы, которые длились не более секунды и содержали только одно действие. Таким образом, мы исключили информацию о случайных входах за выгруженный период без использования приложения.

Подготовка данных для анализа завершена:

Исследовательский анализ данных

наверх

Изучение общей информации

Определим период, к которому относятся данные в имеющемся датасете.

Нам предстоит изучить логи, собранные в период с 7 октября по 3 ноября 2019 года — это ровно четыре недели.

к оглавлению
Посмотрим, как распределились пользователи на группы по совершению целевого действия за это время.

За четыре недели более трёх четвертей пользователей, участвовавших в нашем исследовании, ни разу не просмотрели контакты автора объявления. Лишь 23,1% пользователей совершили целевое действие.


к оглавлению
Посмотрим, в каком соотношении пользователи привлекались из разных источников.


к оглавлению
Посмотрим на динамику использования приложения уникальными пользователями за каждый из дней. Поскольку запланировано рассмотреть динамику по нескольким показателям, создадим функции для построения линейных графиков с разделением и без.

На этом графике показано, как менялось количество пользователей в течение всего периода наблюдения. Мы видим пики и спады общей активности в разные дни. Однако к концу рассматриваемого периода число уникальных пользователей в день начало увеличиваться.

к оглавлению
Посмотрим, как менялось количество открытых сессий в приложении с 7 октября по 3 ноября 2019 года.

Если посмотреть на динамику проведённых сессий, то можно заметить, что она очень похожа на изменчивость количества уникальных пользователей в день на протяжении всего периода. Колебания активности тесно связаны друг с другом. Однако к концу рассматриваемого периода количество сессий за день растёт более заметно.

к оглавлению
Посмотрим, сколько сессий было у каждого пользователя за четыре недели. Поскольку будущие ящики с усами будут повторяться, создадим функцию для их построения.

к оглавлению
Посмотрим, как распределено общее время, проведённое в приложении, у каждого пользователя из нашей выборки.

На этом графике мы видим, что некоторые пользователи провели в приложении немало времени. Особенно выделяется один пользователь, который пользовался приложением суммарно более 42 часов.

Большинство пользователей провели в приложении меньше часа. Рассмотрим график более подробно, увеличив масштаб до двух часов.

За рассматриваемый период половина пользователей проводили в приложении не более 17 минут, а судя по третьему квартилю, ещё треть пользователей использовали приложение до 42 минут за 28 дней. Это означает, что большинство пользователей проводят в приложении немного времени или используют его редко.

Любой пользователь, который суммарно провёл в приложении более 94 минут за 28 дней, будет выделяться на фоне остальных.

Анализ целевой группы

наверх

Разделим пользователей на группы в зависимости от того, открывали ли они в рассматриваемый период контакты автора объявления.

Всё в порядке: общий объём новых датасетов соответствует объёму исходных данных.

к оглавлению
Посмотрим, как пользователи, которые хотя бы раз просматривали контакты за четыре недели, использовали приложение в этот период. Для этого создадим сводную таблицу, в которой подсчитаем количество сессий и общее время, проведённое в приложении с 7 октября по 3 ноября 2019 года.

Таблица сформирована корректно. Теперь рассмотрим среднее количество сессий за каждый день рассматриваемого периода.

Нет явной динамики, но есть заметные снижения активности в понедельник 7 октября и в воскресенье 20 октября. В эти дни пользователи заходили в приложение в среднем один раз в день, за редким исключением. Во все остальные дни некоторые пользователи заходили в приложение немного чаще. В целом, нельзя сказать, что частота посещений приложения у пользователей, просматривающих контакты, увеличилась или уменьшилась за рассматриваемый период.

к оглавлению
Изучим среднюю длительность сессий у пользователей, которые совершают целевое действие.

Из этого графика можно сделать вывод, что в среднем люди, которые просматривают контакты, проводят в приложении около получаса. Однако этот показатель не является стабильным и постоянно меняется в пределах одного диапазона: от 25 до 40 минут.

Возможно, более наглядным будет медианный график, так как на него не так сильно влияют выбросы.

Согласно медианному графику, в приложении ежедневно были пользователи, которые проводили там много времени. Из-за этого средние значения сильно изменились: обычно большинство пользователей проводят в приложении около 20 минут или меньше. Исключение составили только 8 и 10 октября, когда половина пользователей провели в приложении до получаса.

В целом можно заметить, что начало и конец периода не были стабильными. Однако с 16 по 20 октября наблюдалось постепенное увеличение медианного времени, проведённого в приложении, а затем в течение ещё трёх дней — стабильный спад.

к оглавлению
Мы отобрали из датасета всех пользователей, которые хотя бы раз просматривали контакты автора объявления. Посмотрим, как часто они совершали целевое действие за изучаемый период.

Треть пользователей совершили целевое действие только один раз, ещё треть — до четырёх раз, при этом медиана остановилась на двух. Однако есть и те, кто просматривает контакты довольно часто.

к оглавлению
Проверим, существует ли связь между продолжительностью сессии и количеством совершённых целевых действий.

Зависимость не подтверждается: есть как длительные сессии с небольшим количеством просмотренных контактов, так и короткие сессии с аномально большим количеством выполненных целевых действий.

к оглавлению
Разделим сессии на ряд действий, которые завершаются просмотром контактов, для более детального изучения поведения пользователей. Так как звонок не является целевым действием, мы будем его игнорировать, если он совершён сразу после просмотра контактов. Если группа логов состоит из одинаковых повторяющихся действий, то дубли мы также удалим.

После того как мы разделили логи на группы и удалили дубликаты, видим, что некоторые группы теперь содержат только одно целевое действие или не содержат просмотра контактов. Это не поможет нам понять, как пользователи ведут себя до совершения целевого действия. Поэтому мы удалим такие группы.

Проверим, какого размера группы у нас присутствуют.

Чаще всего сценарии, приводящие к просмотру контактов, состоят из ряда в 2 уникальных действия, но в некоторых случаях до просмотра контактов пользователи совершили больше разнообразных манипуляций в приложении. Редкие и длительные случаи не репрезентативны, потому высчитаем их и тоже удалим.

Сценарии, включающие более 5 последовательных уникальных действий, составляют всего 5% от общего числа групп. Мы сохраним для анализа остальные 95% логов о поведении пользователей, которое приводит к просмотру контактов.

Мы удалили аномально большие сценарии. Для анализа у нас остались наиболее популярные сценарии поведения пользователей и ряд менее популярных, но с большим количеством действий в цепочке.

к оглавлению
Подготовим ряд функций, которые обращаются друг к другу и формируют диаграмму Сэнкея, чтобы рассмотреть сценарии, которые приводят к целевому действию.

Самые распространённые сценарии состоят из двух шагов. По мере того как в цепочке появляется больше событий, частота открытия контактов снижается.

Поскольку в группах событий может быть разное количество шагов, общая диаграмма затрудняет детальный анализ. Поэтому мы разделим набор данных на группы в зависимости от количества шагов в цепочке и последовательно создадим диаграммы для каждой из них. Это позволит нам лучше рассмотреть последовательность действий, приводящих к просмотру контактов, в сценариях разной продолжительности.

Этот анализ показывает, что более длинные сценарии поведения пользователей дают лучшее понимание их намерений и мотивов, чем короткие и поспешные переходы.

к оглавлению

Для построения воронки рассмотрим три сценария, состоящих из 3 шагов:

Для проведения расчётов нам понадобятся ряд фильтров, которые помогут определить уникальных пользователей, переходящих от одного действия к другому. Поэтому создадим функции, упрощающие эти вычисления.

Сценарий, при котором пользователи ориентируются на территориальное положение автора объявления, демонстрирует хорошую конверсию: 19% пользователей, изучивших карту перед просмотром объявления, переходят к просмотру контактов. Потери между первым и вторым шагом составляют всего 6%. Это означает, что если пользователь начинает с просмотра карты, он с высокой вероятностью перейдёт к рекомендованным объявлениям. Из них 20% пользователей затем открывают контакты, что указывает на высокий уровень заинтересованности пользователей из этого сценария.

Изначально большее число пользователей обращается к поисковым запросам. Из них 38% переходят к просмотру фотографий предлагаемых вещей, и далее 28% решают открыть контакты автора объявления. Хотя финальная конверсия составляет всего 11% от числа начавших поиск, доля пользователей, перешедших к контактам после просмотра фотографий, является весьма значимой.

Сценарий, включающий поиск, просмотр предложенных объявлений и переход к контактам, демонстрирует самую низкую конверсию среди рассмотренных вариантов: только 8% от начавших поиск и 17% от тех, кто просматривал предложенные объявления, переходят к контактам. Это позволяет предположить, что результаты такого поведения менее надежны. Лучше не полагаться на быстрый переход от предложенных объявлений к контактам без проявления большей заинтересованности, так как вероятность успешной сделки в этом случае может быть ещё ниже.

к оглавлению
Теперь мы определим относительную частоту событий для пользователей, которые открывают и не открывают контакты, чтобы выделить те, которые характерны для пользователей из целевой аудитории.

Проверка гипотез

наверх

Нулевая и альтернативная гипотезы для сравнения конверсии у пользователей, которые совершают только tips_show и те, что совершает иtips_show, и tips_click будет следующими:

Чтобы проверить эти гипотезы, мы отберём множества пользователей, которые выполняли необходимые действия и просмотрели контакты, а затем сформируем выборки для проведения теста. Для снижения вероятности ошибки первого рода за уровень статистической значимости примем 1%. Поскольку эти две выборки не связаны между собой, мы сможем применить статистический тест с использованием t-распределения.

Вероятность, что разница в конверсии между группами пользователей, которые только увидели рекомендованные объявления и которые увидели объявления и кликнули по ним, возникла случайно, крайне мала: примерно 0,00000003%. Это позволяет сделать вывод, что конверсия двух этих групп различается.

к оглавлению

Для сравнения конверсии пользователей, добавляющих объявления в избранное, и конверсии пользователей, открывающих объявления, мы выдвигаем следующие гипотезы:

Чтобы выборки были независимыми, мы исключим из обеих групп пересечения действий. Здесь мы также будем использовать Т-тест со статистической значимостью 1%.

Полученное значение p-value (~0,00000000018) значительно меньше заданного уровня значимости. Поэтому мы можем отвергнуть нулевую гипотезу и сделать вывод, что у пользователей, которые добавляют объявления в избранное, конверсия в просмотры контактов выше, чем у тех, кто только открывает карточки объявлений.

к оглавлению

Нулевая и альтернативная гипотезы для сравнения источников привлечения пользователей, которые совершают целевые действия в приложении, можно сформулировать следующим образом:

Для проверки этих гипотез мы также по аналогии применим Т-тест со статистической значимостью 1%.

Результаты теста показали, что разница в конверсиях между пользователями, пришедшими из Yandex и Google, с вероятностью почти 70% может быть случайной. Это означает, что у нас нет достаточных статистических данных, чтобы утверждать, что конверсии отличаются. Поэтому мы не можем отвергнуть предположение о том, что конверсии среди пользователей из этих двух источников одинаковы.

Общие выводы и рекомендации

наверх

В ходе анализа данных, собранных с 7 октября по 3 ноября 2019 года, мы обнаружили, что большинство пользователей не просматривали контакты за этот период. Тем не менее, наблюдался постепенный рост количества уникальных пользователей и числа открытых сессий, что свидетельствует о возрастающем интересе к приложению «Ненужные вещи». Однако это пока не привело к заметному увеличению вовлечённости целевой группы: среднее количество сеансов и средняя длительность сессий у пользователей, открывающих контакты, остаются стабильными и не показывают значительного роста.

Наиболее перспективные сценарии включают использование поиска, изучение карты и просмотр фотографий в объявлениях. Эти шаги обычно предшествуют открытию контактов, что указывает на потенциал повышения конверсии.

Добавление объявлений в избранное также является характерной чертой пользователей, открывающих контакты. Это подтверждает гипотезу о том, что удобный доступ к избранным объявлениям может стимулировать совершение целевого действия.

Клики по рекомендованным объявлениям также положительно коррелируют с открытием контактов.

Наконец, по результатам проверки гипотезы о лидерах источников привлечения (yandex vs google) не было выявлено статистически значимой разницы в конверсии. Это подтверждает стабильность выбранных каналов привлечения, однако стоит продолжать мониторинг и оптимизацию каналов для долгосрочного роста.

Эти меры помогут увеличить вовлечённость пользователей и рост конверсии в просмотры контактов, что в свою очередь повысит вероятность успешных сделок через приложение «Ненужные вещи».